<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * 回调函数 
         */
        let a = '';

        function buy(callback){
            setTimeout(()=>{
                a = '蘑菇';
                callback(a)
            },2000)
        }

        buy(function(val){
            // console.log(val)
        })

        // promise 解决回调问题的
        // 三个状态： 成功  失败  等待
        // resolve 代表的是转向成功态
        // reject 代表的是转向失败态  resolve 和reject 均是函数
        // promise的实例就一个then方法，then方法中有两个参数
        let p = new Promise((resolve, reject) => {
            setTimeout(() => {
                let a = '蘑菇';
                //成功
                resolve(a)
                // 失败
                // reject(a)
            },2000)
        })
        p.then(res => {
            console.log(res)
        },
        err => {
            console.log('err')
        })


        // promise第二种
        function buyPack() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    if (Math.random() > 0.5) {
                        resolve('买')
                    } else {
                        reject('不买')
                    }
                },Math.random()*1000)
            })
        }
        // then() 写法 两个 回调函数  成功和失败
        buyPack().then( function(res){
            console.log(res)
        },
        function(err){
            console.log(err)
        })
        // then catch 写法
        buyPack().then(res =>{
            console.log(res)
        }).catch(error => {
            console.log(error)
        })
    </script>
</body>
</html>